package cn.house.houseai.service.impl;

import cn.house.houseai.entify.Device;
import cn.house.houseai.entify.Sensors;
import cn.house.houseai.entify.Users;
import cn.house.houseai.mapper.DeviceMapper;
import cn.house.houseai.mapper.SensorsMapper;
import cn.house.houseai.mapper.UserMapper;
import cn.house.houseai.service.SensorsService;
import cn.house.houseai.vo.ResultVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.security.Timestamp;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 羡y
 * @date 2024/9/30
 * @Description
 */
@Service
@Slf4j
public class SensorsServiceImpl implements SensorsService {
    @Autowired
    private DeviceMapper deviceMapper;
    @Autowired
    private SensorsMapper sensorsMapper;
    @Override
    public ResultVo querySensorsByUserId(Integer deviceId) {
        List<Sensors> sensorsList;  // 直接初始化，不需要设置为null

        try {
            // 调用mapper方法查询传感器数据
            sensorsList = sensorsMapper.querySensorsByUserId(deviceId);

            // 检查返回的列表是否为空
            if (sensorsList == null || sensorsList.isEmpty()) {
                return new ResultVo(102, null, "没有找到相关传感器数据"); // 返回102状态码表示没有数据
            }

            return new ResultVo(100, sensorsList, "查询成功"); // 返回成功的结果
        } catch (Exception e) {
            // 记录异常日志（可选）
            // logger.error("查询传感器失败", e); // 使用日志记录异常信息

            return new ResultVo(101, e.getMessage(), "查询失败"); // 返回失败的结果
        }
    }



/**
 * 为指定的用户设备添加传感器
 *
 * @param userId  用户ID
 * @param sensors 传感器数据
 * @param deviceId 可选的设备ID，若不为空则只添加该设备的传感器
 */
@Override
public ResultVo addSensorToUserDevices(int userId, Sensors sensors, Integer deviceId) {
    // 获取用户的设备对象列表
    List<Device> devices = deviceMapper.queryId(userId);

    // 检查设备列表是否为空
    if (devices == null || devices.isEmpty()) {
        return new ResultVo(101, null, "检查设备ID列表是否为空");
    }

    // 如果传入了 deviceId，则只为指定设备添加传感器
    if (deviceId != null) {
        // 使用 java.util.Date 设置时间
        long currentTimeMillis = System.currentTimeMillis();
        Date date = new Date(currentTimeMillis);

        // 设置 dataCollectionTime
        sensors.setData_collection_time(date); // 确保你的 set 方法能接受 Date 类型
        // 检查设备ID是否在设备对象中
        boolean deviceExists = devices.stream().anyMatch(device -> device.getDevice_id() == deviceId.intValue()); // 使用基本类型比较
        log.info("设备信息：{}",sensors );
        if (deviceExists) {
            // 在这里可以加上额外的检查，确认传感器未存在
            sensorsMapper.insertSensors(deviceId, sensors);
            return new ResultVo(100, sensors, "成功为当前设备添加传感器");
        } else {
            return new ResultVo(102, null, "设备ID不存在");
        }
    }

    // 如果deviceId为null，返回错误信息
    return new ResultVo(103, null, "未提供设备ID，请提供一个有效的设备ID");
}

    @Override
    public ResultVo updateSensors(int device_id, int sensor_id, Sensors sensors) {
        int vo = sensorsMapper.updateSensors(device_id, sensor_id, sensors);
        if (vo > 0) {
            return new ResultVo(100, sensors, "传感器信息更新成功");
        } else {
            return new ResultVo(101, null, "传感器信息更新失败");
        }
    }




}
